function [index_delete] = delete_repeat_value(data_input)
%本函数的主要作用是从AIS原始轨迹中，以时间排序依据后，对完全重复数值进行剔除
%重复值的认定标准：
% 首先，以时间为首要判定条件，如果时间不想等，则不认定为重复数数据
% 如果时间相同或者相差1秒，且经纬度相同，则认定为是相同数据，随机删除一个即可
% 如果时间相同，但是经纬度不相同，则认定为其中之一是位置异常数据，因此需要使用后面异常点判定方法


index_delete=[];%保存需要剔除的数据的行号

time_diff=diff(data_input.Time);
%由于无法用时间duration格式进行直接对比大小，因此转换为字符串形式进行对比
time_0='00:00:00';%时间完全相同
for i=1:size(time_diff,1)
    cmp_flag1(i,1) =strcmpi(char(time_diff(i)),time_0);%保存对比结果
end
time_1='00:00:01';%时间相差1秒
for i=1:size(time_diff,1)
    cmp_flag2(i,1) =strcmpi(char(time_diff(i)),time_1);%保存对比结果
end
cmp_flag=cmp_flag1|cmp_flag2;
repeat_pos=find(cmp_flag);

% time_diff1=diff(data_input.time);
% 
% repeat_pos1=find(time_diff1<=2);

index_delete=[];
index_paper_need=[];%为了文章中能够描述部分重复数据（轨迹急转点），需要记录符合条件的点的索引
diff_criterion=0.0001;
%上述repeat_pos是对比时间相同或差1秒的情况，现在需要对比经纬度是否相同
for i=1:size(repeat_pos,1)-1
    % if repeat_pos(i)==381
    % test=1;
    % end
    diff_lon = abs(data_input.Lon(repeat_pos(i))-data_input.Lon(repeat_pos(i)+1));
    diff_lat = abs(data_input.Lat(repeat_pos(i))-data_input.Lat(repeat_pos(i)+1));
    %如果两数据的经纬度数据差小于0.0001，可认为是重复数据，则随机剔除一组即可，否则，均保留
    if diff_lon <= diff_criterion  && diff_lat<  diff_criterion
        index_delete=[index_delete;repeat_pos(i)];
    else
        if diff_lon >=0.001 || diff_lat >= 0.001
            index_paper_need = [index_paper_need;repeat_pos(i)];%部分重复数据的索引
        end
    end
end


% %时间重复对应数据需要分情况进行删除
% for i=1:size(repeat_pos,1)
%     index=[repeat_pos(i) repeat_pos(i)+1];%重复数据所在行，一般都是与其后数据重复
%     cmp_data =data_input(index,{'Lon','Lat'});
%     if   ismember(cmp_data(1,:),cmp_data(2:end,:))%如果重复数据在时间、经纬度等数据中是完全一致，则随机删除一个（删除第一个即可）
%         delete_index=[delete_index;repeat_pos(i) ];
%     else  %如果时间重复数据中，经纬度等数据不一致时，需要根据经纬度的变化趋势进行设定删除
%        %当时间一致，但是经纬度不一致时，需要判断经纬度变化趋势，从而确定剔除值
%        %但是判断变化趋势时，需要注意窗口大小，即重构数据集的大小,主要是看数据集的边界，从而判断点是否在范围中
%         boundary_index=[index(1)-1  index(end)+1];
%         boundary_data = data_input(boundary_index,{'Lon','Lat'});
%         byound_index=index(estimate_boundary(boundary_data,cmp_data));%返回越界的数据在原始数据集中的行号
%
%         delete_index=[delete_index;byound_index];
%     end
% end

end